// 引入express模块
const express=require("express");
const app=express();
const path = require("path");

// 处理bodyy请求体的中间件
// app.use()这个是可以接收所有请求，express.urlencoded()这个是上面的一个方法，是用来接收表单的
// express.json()是用来接收json的
app.use(express.urlencoded())
app.use(express.json())

// // 处理body请求体的中间件request发送请求对象
// app.use((request,response,next)=>{
//   // console.log(request);
//   // 声明一个dataStr，值为空
//   let dataStr=""
// //  绑定事件data   chunk是累加器的意思
//   request.on("data",(chunk)=>{
//     // 累加器的数据要转换为字符串形式
//     // console.log(chunk.toString());//user=laoli&pass=123
//     // 拼接
//     dataStr+=chunk.toString()
//   })
//     // 绑定end事件
//     request.on("end",()=>{
//     // 看它执行完成了没
//       console.log("ok",dataStr);
      // 把dataStr切割用split来进行切割
      // dataStr.split("&")//["name=laoli","age=123"]
//     //  写法1
    // // 声明一个空对象
    //   const o ={};
    // //  遍历
    //   dataStr.split("&").forEach(item =>{
    // //  切割key 跟name value跟,laoli一一对应
    //     const [key, value]=item.split("=")//["name","laoli"]
    //     //因为是变量   .的话是成员访问，[]是需计算的成员访问key是变量
    //     o[key]=value;
    //   })
    //   console.log(o,"oooo");

      // 方法2：
  //     // 切割 reduce万物皆对象 prev是上次返回的值 current是初始值
  //     const data=dataStr.split("&").reduce((prev,current)=>{
  //      //  切割key 跟name value跟,laoli一一对应
  //       const[key,value]=current.split("=")//["name","laoli"]
  //       prev[key]=value;
  //       // 最后要把
  //       return prev;
  //     },{})
  //     console.log(data,"data");
  //     request.body=data;
  //  next()
  //   })

// })


//查询学生信息接口
app.get("/user", (request, response) => {
  // console.log(req.query);
  const {
    userId
// req.query是输入框的数据赋值
  } = request.query;
// console.log(request.query);

//如果查询失败
// 取反
if (userId !== "001") {
    return response.send({
      code: 10001,
      msg: "查询失败",
      data: null
    })
  }

 //查询成功 响应 return是退出的意思
 response.send({
    code: 10000,
    msg: "查询成功",
    data: {
      name: "小明",
      age: 18,
      sex: "男"
    }
  })

})

app.get("/userInfo/:userId", (req, res) => {
  // console.log(req.params);
  const {
    userId
  } = req.params;

// 如果查询失败
if(userId !=="001"){
  return res.send({
    code:10001,
    msg:"查询失败",
    data:unll
  })
}
// 查询成功响应
res.send({
  code:10000,
  msg:"查询成功",
  data:{
    name:"小明",
    age:"19",
    sex:"男"
  }

})

})

app.post("/adduser",(request,response)=>{
  console.log("adduser");
  console.log(request.body,"req.body");
  console.log(request.query,"request.query");
  const {
    name,
    age,
    sex
  } =req.body;
  if(!name || !age || !sex){
    return response.send({
      code:10001,
      mes:"添加失败了",
      data:null
    })
  }

    response.send({
      code:"添回成功了",
      data:null
    })
})
// 响应出来


    
// 静态资源部署接口
// / path.resolve拼接路径的意思  __dirname是用来动态获取当前文件所属目录的绝对路径
app.get('/1',(request,response)=>{
  const filePath=path.resolve(__dirname,"./1.基础的get请求练习.html")
// 把文件直接写出来
response.sendFile(filePath)

})

app.get('/2',(request,response)=>{
  const filePath=path.resolve(__dirname,"./post请求.html")
// 把文件直接写出来
response.sendFile(filePath)

})



// 绑定事件
app.listen(8080,()=>{
    console.log('服务器请求成功 请访问 http://127.0.0.1:8080');
})

